// 扩展1. new 和 malloc函数内部实现方式区别
/**
 * 
*/
#include <iostream>
#include <malloc.h>
class Box
{
private:
  /* data */
public:
  Box(/* args */);
  ~Box();
  void test();
};

Box::Box(/* args */)
{
  std::cout << "调用构造函数" << std::endl;
}

Box::~Box()
{
  std::cout << "调用析构函数" << std::endl;
}

void Box::test()
{
  std::cout << " test" << std::endl;
}

int main(void)
{
  // 在堆区分配一块 Box类型大小 的内存空间，并强制转化成Box *
  Box *p1 = (Box *)malloc(sizeof(Box));// 这不会调用构造函数
  p1->test();
  free(p1);// 这不会调用析构函数

  // 在堆区创建一个Box类的对象，调用构造函数
  Box *p2 = new Box;
  p1->test();
  delete p2;// 调用析构函数

  printf("----------end---------------\n");
  return 0;
}